package card;

import java.util.*;

public class Solution {
//    private static final int TARGET = 24;
//
//    private List<String> res = new ArrayList<>();
    public List<String> judgePoint24(int[] cards){
        // 还是应该用多种组合来解决
        // 然后再枚举出所有的括号的情况
        //   一个括号的情况
        //  (a+b)+c+d 0 4
        //  a+(b+c)+d 2 6
        //  a+b+(c+d) 4 8
        //  (a+b+c)+d 0 6
        //  a+(b+c+d) 2 8
        // (+)(-)(*)(/)
        // (a+b)+(c+d) 0 4 6 10
        // (a+(b+c))+d 0 3 7 8
        // ((a+b)+c)+d 0 1 5 8
        // a+(b+(c+d)) 2 5 9 10
        // a+((b+c)+d) 2 3 7 10
        //
        return null;
    }
    // 创建所有的前缀表达式
    private static List<String> createOps(int[]cards){
        char[]op = {'+','-','*','/'};
        List<StringBuilder> ops = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                for (int k = 0; k < 4; k++) {
                    for (int l = 0; l < 10; l++) {
                        ops.add(new StringBuilder().append('X').append(op[i]).append('X').append(op[j]).append('X').append(op[k]).append('X'));
                    }
                }
            }
        }
        List<StringBuilder> tmp = new ArrayList<>();

        for (int i = 0; i<ops.size(); i+=10) {
            // 去掉同级运算符号的 --- + *  a+b+c+d 不需要括号
            StringBuilder sb = ops.get(i);
            if(sb.charAt(1) == sb.charAt(3)&&sb.charAt(1) == sb.charAt(5)&&(sb.charAt(1) == '+'||sb.charAt(1) == '*')){
                tmp.add(sb);
                continue;
            }
            //
            tmp.add(ops.get(i).insert(0,'(').insert(4,')'));
            tmp.add(ops.get(i+1).insert(2,'(').insert(6,')'));
            tmp.add(ops.get(i+2).insert(4,'(').insert(8,')'));
            tmp.add(ops.get(i+3).insert(0,'(').insert(6,')'));
            tmp.add(ops.get(i+4).insert(2,'(').insert(8,')'));
            tmp.add(ops.get(i+5).insert(0,'(').insert(4,')').insert(6,'(').insert(10,')'));
            tmp.add(ops.get(i+6).insert(0,'(').insert(3,'(').insert(7,')').insert(8,')'));
            tmp.add(ops.get(i+7).insert(0,'(').insert(1,'(').insert(5,')').insert(8,')'));
            tmp.add(ops.get(i+8).insert(2,'(').insert(5,'(').insert(9,')').insert(10,')'));
            tmp.add(ops.get(i+9).insert(2,'(').insert(3,'(').insert(7,')').insert(10,')'));
        }
        List<String> ans = new ArrayList<>();
        for (StringBuilder sb : tmp) {
            int index = 0;
            for (int i = 0; i < sb.length(); i++) {
                if(sb.charAt(i) == 'X'){
                    sb.replace(i,i+1,Integer.toString(cards[index++]));
                }
            }
            ans.add(sb.toString());
        }
        return ans;
    }

    private static int caculate(String str){
        return 0;
    }
    // 获取前缀表达式
    public static void main(String[] args) {
        int[] cards = {12,898,3,884};
        List<String> ops = createOps(cards);
        for (int i = 0; i < ops.size(); i++) {
            System.out.println(ops.get(i));
        }
        System.out.println(ops.size());
    }
}
